# SQL๊ณผ NOSQL์ ์ฐจ์ด
์น ์ฑ์ ๊ฐ๋ฐํ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ ๋ ๊ณ ๋ฏผํ๊ฒ ๋๋ค.
MySQL๊ณผ ๊ฐ์ SQL์ ์ฌ์ฉํ ๊น? ์๋๋ฉด MongoDB์ ๊ฐ์ NoSQL์ ์ฌ์ฉํ ๊น?
๋ณดํต Spring์์ ๊ฐ๋ฐํ ๋๋ MySQL์, Node.js์์๋ MongoDB๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ์ ๊ฒ์ด๋ค.
ํ์ง๋ง ๊ทธ๋ฅ ๋จ์ํ ํ๋ ์์ํฌ์ ๋ฐ๋ผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์๋๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ์ ์์ ์ ํฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํํด์ผ ํ๋ค. ์ฐจ์ด์ ์ ์์๋ณด์
# SQL (๊ด๊ณํ DB)
SQL์ ์ฌ์ฉํ๋ฉด RDBMS์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์ญ์ ๋ฐ ๊ฒ์ ํ ์ ์์
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ํต์ฌ์ ์ธ ๋ ๊ฐ์ง ํน์ง์ด ์๋ค.
- ๋ฐ์ดํฐ๋ ์ ํด์ง ๋ฐ์ดํฐ ์คํค๋ง์ ๋ฐ๋ผ ํ ์ด๋ธ์ ์ ์ฅ๋๋ค.
- ๋ฐ์ดํฐ๋ ๊ด๊ณ๋ฅผ ํตํด ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ถ์ฐ๋๋ค.
๋ฐ์ดํฐ๋ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ก ์ ์ฅ๋๋๋ฐ, ๊ฐ ํ ์ด๋ธ๋ง๋ค ๋ช ํํ๊ฒ ์ ์๋ ๊ตฌ์กฐ๊ฐ ์๋ค. ํด๋น ๊ตฌ์กฐ๋ ํ๋์ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ์ ์๋๋ค.
๋ฐ๋ผ์ ์คํค๋ง๋ฅผ ์ค์ํ์ง ์์ ๋ ์ฝ๋๋ ํ ์ด๋ธ์ ์ถ๊ฐํ ์ ์๋ค. ์ฆ, ์คํค๋ง๋ฅผ ์์ ํ์ง ์๋ ์ด์์ ์ ํด์ง ๊ตฌ์กฐ์ ๋ง๋ ๋ ์ฝ๋๋ง ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง ์ค ํ๋๋ค.
๋ํ, ๋ฐ์ดํฐ์ ์ค๋ณต์ ํผํ๊ธฐ ์ํด '๊ด๊ณ'๋ฅผ ์ด์ฉํ๋ค.
ํ๋์ ํ ์ด๋ธ์์ ์ค๋ณต ์์ด ํ๋์ ๋ฐ์ดํฐ๋ง์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ ์ด๋ธ์์ ๋ถ์ ํํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ํ์ด ์์ด์ง๋ ์ฅ์ ์ด ์๋ค.
# NoSQL (๋น๊ด๊ณํ DB)
๋ง๊ทธ๋๋ก ๊ด๊ณํ DB์ ๋ฐ๋๋ค.
์คํค๋ง๋ ์๊ณ , ๊ด๊ณ๋ ์๋ค!
NoSQL์์๋ ๋ ์ฝ๋๋ฅผ ๋ฌธ์(documents)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฌ๊ธฐ์ SQL๊ณผ ํต์ฌ์ ์ธ ์ฐจ์ด๊ฐ ์๋๋ฐ, SQL์ ์ ํด์ง ์คํค๋ง๋ฅผ ๋ฐ๋ฅด์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ์ถ๊ฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง NoSQL์์๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ปฌ๋ ์ ์ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ฌธ์(documents)๋ Json๊ณผ ๋น์ทํ ํํ๋ก ๊ฐ์ง๊ณ ์๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฒ๋ผ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋๋์ด๋ด์ง ์๊ณ , ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋์ผํ '์ปฌ๋ ์ '์ ๋ฃ๋๋ค.
๋ฐ๋ผ์ ์ ์ฌ์ง์ SQL์์ ์งํํ Orders, Users, Products ํ ์ด๋ธ๋ก ๋๋ ๊ฒ์ NoSQL์์๋ Orders์ ํ๊บผ๋ฒ์ ํฌํจํด์ ์ ์ฅํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ ํ์์์ด ์ด๋ฏธ ํ์ํ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด NoSQL์ด๋ค. (NoSQL์๋ ์กฐ์ธ์ด๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์์)
๊ทธ๋ฌ๋ฉด ์กฐ์ธํ๊ณ ์ถ์ ๋ NoSQL์ ์ด๋ป๊ฒ ํ ๊น?
์ปฌ๋ ์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ฌ ๊ฐ ์ปฌ๋ ์ ์ผ๋ถ๋ถ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ ์ฐ์ถํ๋๋ก ํ๋ค.
ํ์ง๋ง ์ด๋ฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋์ด ์๋ก ์ํฅ์ ์ค ์ํ์ด ์๋ค. ๋ฐ๋ผ์ ์กฐ์ธ์ ์ ์ฌ์ฉํ์ง ์๊ณ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ฐ์ดํฐ์ผ ๋ NoSQL์ ์ฐ๋ฉด ์๋นํ ํจ์จ์ ์ด๋ค.
# ํ์ฅ ๊ฐ๋
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น๊ตํ ๋ ์ค์ํ Scaling ๊ฐ๋ ๋ ์กด์ฌํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ํ์ฅ์ฑ์ '์์ง์ ' ํ์ฅ๊ณผ '์ํ์ ' ํ์ฅ์ผ๋ก ๋๋์ด์ง๋ค.
- ์์ง์ ํ์ฅ : ๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ (ex. CPU ์ ๊ทธ๋ ์ด๋)
- ์ํ์ ํ์ฅ : ๋ ๋ง์ ์๋ฒ๊ฐ ์ถ๊ฐ๋๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฒด์ ์ผ๋ก ๋ถ์ฐ๋จ์ ์๋ฏธ (ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ํ์ง๋ง ์ฌ๋ฌ ํธ์คํธ์์ ์๋)
๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์ผ๋ก ์ธํด SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์์ง์ ํ์ฅ๋ง ์ง์ํจ
์ํ์ ํ์ฅ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ง ๊ฐ๋ฅ
# ๊ทธ๋ผ ๋ ์ค์ ๋ญ ์ ํ?
์ ๋ต์ ์๋ค. ๋๋ค ํ๋ฅญํ ์๋ฃจ์ ์ด๊ณ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋์ ๋ฐ๋ผ ์ ํ์ ๊ณ ๋ คํด์ผํ๋ค.
# SQL ์ฅ์
- ๋ช ํํ๊ฒ ์ ์๋ ์คํค๋ง, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
- ๊ด๊ณ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์์ด ํ๋ฒ๋ง ์ ์ฅ
# SQL ๋จ์
- ๋ ์ ์ฐํจ. ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ์ฌ์ ์ ๊ณํํ๊ณ ์๋ ค์ผ ํจ. (๋์ค์ ์์ ํ๊ธฐ ํ๋ฌ)
- ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์์ด์ ์กฐ์ธ๋ฌธ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง ์ ์์
- ๋์ฒด๋ก ์์ง์ ํ์ฅ๋ง ๊ฐ๋ฅํจ
# NoSQL ์ฅ์
- ์คํค๋ง๊ฐ ์์ด์ ์ ์ฐํจ. ์ธ์ ๋ ์ง ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ํ๊ณ ์๋ก์ด ํ๋ ์ถ๊ฐ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์๋ก ํ๋ ํ์์ผ๋ก ์ ์ฅ๋จ. ๋ฐ์ดํฐ ์ฝ์ด์ค๋ ์๋ ๋นจ๋ผ์ง
- ์์ง ๋ฐ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์์ํค๋ ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฒญ ์ฒ๋ฆฌ ๊ฐ๋ฅ
# NoSQL ๋จ์
- ์ ์ฐ์ฑ์ผ๋ก ์ธํด ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฒฐ์ ์ ๋ฏธ๋ฃจ๊ฒ ๋ ์ ์์
- ๋ฐ์ดํฐ ์ค๋ณต์ ๊ณ์ ์ ๋ฐ์ดํธ ํด์ผ ํจ
- ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ์ค๋ณต๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ชจ๋ ์ปฌ๋ ์ ์์ ์ํํด์ผ ํจ (SQL์์๋ ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ํ๋ฒ๋ง ์ํ์ด ๊ฐ๋ฅ)
# SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ด ๋ ์ข์ ๋
๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ
NoSQL์์๋ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์
๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๊ณ , ๋ช ํํ ์คํค๋ง๊ฐ ์ฌ์ฉ์์ ๋ฐ์ดํฐ์๊ฒ ์ค์ํ ๊ฒฝ์ฐ
# NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ด ๋ ์ข์ ๋
- ์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ ์๊ฑฐ๋ ๋ณ๊ฒฝ/ํ์ฅ ๋ ์ ์๋ ๊ฒฝ์ฐ
- ์ฝ๊ธฐ๋ฅผ ์์ฃผ ํ์ง๋ง, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์์ฃผ ์๋ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ (๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ ๊ฒฝ์ฐ)
ํ๋์ ์ ์ ๋ฐฉ๋ฒ์ด์ง ์์ ํ ์ ๋ต์ด ์ ํด์ ธ ์๋ ๊ฒ์ ์๋๋ค.
SQL์ ์ ํํด์ ๋ณต์กํ JOIN๋ฌธ์ ๋ง๋ค์ง ์๋๋ก ์ค๊ณํ์ฌ ๋จ์ ์ ์์จ ์๋ ์๊ณ
NoSQL์ ์ ํํด์ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์ค๊ณํด์ ๋จ์ ์ ์์จ ์๋ ์๋ค.
โ - SQL Injection - ์ด์(Anomaly) โ